// ranking.js
const app = getApp();
const db = wx.cloud.database();
const MAX_LIMIT = 20; // 每次获取的最大数量

Page({
  data: {
    userData: {
      openid: '',
      nickname: '',
      avatarUrl: '',
      highScore: 0
    },
    rankList: [],
    myRank: '未上榜',
    hasMore: false,
    currentPage: 0,
    hasUserInfo: false
  },

  onLoad: function() {
    // 从全局获取用户数据
    if (app.globalData.userData) {
      this.setData({
        'userData': app.globalData.userData
      });
    }

    // 检查是否已授权获取用户信息
    this.checkUserInfo();
    
    // 获取排行榜数据
    this.getRankData();
  },

  onShow: function() {
    // 每次显示页面时刷新用户数据
    if (app.globalData.userData) {
      this.setData({
        'userData': app.globalData.userData
      });
      
      // 重新获取排行榜数据
      this.getRankData();
    }
  },

  // 检查是否已授权获取用户信息
  checkUserInfo: function() {
    wx.getSetting({
      success: res => {
        if (res.authSetting['scope.userInfo']) {
          this.setData({
            hasUserInfo: true
          });
        }
      }
    });
  },

  // 获取用户信息
  onGetUserInfo: function(e) {
    if (e.detail.userInfo) {
      // 更新用户信息
      const userData = this.data.userData;
      userData.nickname = e.detail.userInfo.nickName;
      userData.avatarUrl = e.detail.userInfo.avatarUrl;
      
      this.setData({
        userData,
        hasUserInfo: true
      });
      
      // 更新全局数据
      app.globalData.userData = userData;
      
      // 保存到云数据库
      app.updateUserData(userData);
      
      // 重新获取排行榜数据
      this.getRankData();
    }
  },

  // 获取排行榜数据
  getRankData: function() {
    // 重置数据
    this.setData({
      rankList: [],
      currentPage: 0
    });
    
    // 加载第一页数据
    this.loadMoreRank();
    
    // 获取我的排名
    this.getMyRank();
  },

  // 加载更多排行榜数据
  loadMoreRank: function() {
    const { currentPage } = this.data;
    const skip = currentPage * MAX_LIMIT;
    
    wx.showLoading({
      title: '加载中...',
    });
    
    // 从云数据库获取排行榜数据
    db.collection('users')
      .orderBy('highScore', 'desc')
      .skip(skip)
      .limit(MAX_LIMIT)
      .get()
      .then(res => {
        const { data } = res;
        
        if (data.length > 0) {
          // 处理排行榜数据
          const newRankList = data.map((item, index) => {
            return {
              ...item,
              rank: skip + index + 1,
              isMe: item.openid === this.data.userData.openid
            };
          });
          
          // 更新数据
          this.setData({
            rankList: [...this.data.rankList, ...newRankList],
            currentPage: currentPage + 1,
            hasMore: data.length === MAX_LIMIT
          });
        } else {
          this.setData({
            hasMore: false
          });
        }
        
        wx.hideLoading();
      })
      .catch(err => {
        console.error('获取排行榜数据失败', err);
        wx.hideLoading();
        
        wx.showToast({
          title: '获取排行榜失败',
          icon: 'none'
        });
      });
  },

  // 获取我的排名
  getMyRank: function() {
    const { openid } = this.data.userData;
    
    if (!openid) {
      return;
    }
    
    // 查询比我分数高的用户数量
    db.collection('users')
      .where({
        highScore: db.command.gt(this.data.userData.highScore || 0)
      })
      .count()
      .then(res => {
        // 排名 = 比我分数高的人数 + 1
        const myRank = res.total + 1;
        
        this.setData({
          myRank
        });
      })
      .catch(err => {
        console.error('获取我的排名失败', err);
      });
  },

  // 分享
  onShareAppMessage: function() {
    return {
      title: `我在早餐店游戏中获得了${this.data.userData.highScore || 0}分，快来挑战我吧！`,
      path: '/pages/index/index',
      imageUrl: '/images/share_image.png' // 分享图片
    };
  }
});